/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package clientesocket;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 *
 * @author Leo
 */

/*
 * clase que se encarga de realizar el login del cliente contra el servidor
 */
public class Login implements Runnable {

    private String nombre;
    private String clave;
    private Socket cliente;
    private DataInputStream entrada;
    private DataOutputStream salida;
    private VentanaLogin ventanaLogin;
    private int reconectar;
    private String ip;
    private String ruta = "Archivos/";

    public Login(String nombre, String clave, VentanaLogin ventanaLogin, int reconectar, String ip) {
        this.nombre = nombre;
        this.clave = clave;
        this.ventanaLogin = ventanaLogin;
        this.reconectar = reconectar;
        this.ip = ip;
    }
    /*
     * metodo que se encarga de enviar la informacion del usuario al servidor para que 
     * este sea quien le permita ingresar al sistema
     */
    public void iniciarSesion() {
        try {
            salida.writeUTF("LOGIN");
            salida.writeUTF(nombre + "+" + clave);

            String mensaje = entrada.readUTF();
            if (mensaje.equals("true")) {
                String cadenaArchivos = entrada.readUTF();
                ventanaLogin.setVisible(false);
                File directorio = new File(ruta+nombre);
                if(directorio.exists()==false)
                    directorio.mkdir();
                VentanaCliente ventanita = new VentanaCliente();
                ventanita.setRuta(ruta+nombre+"/");
                ventanita.llenarcombobox(cadenaArchivos);
                ventanita.setTextLabel("Bienvenido " + nombre);
                ventanita.setUsuario(nombre);
                ventanita.setVisible(true);
            } else {
                ventanaLogin.alertaerrorlogin();
                ventanaLogin.activarIniciar();
            }
            entrada.close();
            salida.close();
            cliente.close();
        } catch (IOException ex) {
            System.out.println("se cayo en login");
        }
    }
    /*
     * metodo que se encarga de buscar otro servidor para realizar la conexion
     * en caso de que se caiga algun nodo
     */
    public void reconectar(int intento) {
        boolean tratar = true;
        String ipNuevo = null;
        switch (intento) {
            case 1:
                ipNuevo = VentanaLogin.configuracion.getIp();
                System.out.println("LOGIN: Reconectando con servidor 1: " + ipNuevo);
                break;
            case 2:
                ipNuevo = VentanaLogin.configuracion.getIp2();
                System.out.println("LOGIN: Reconectando con servidor 2: " + ipNuevo);
                break;
            case 3:
                ipNuevo = VentanaLogin.configuracion.getIp3();
                System.out.println("LOGIN: Reconectando con servidor 3: " + ipNuevo);
                break;
            default: {
                tratar = false;
                System.out.println("LOGIN: Ninguno de los servidores esta activo");
                ventanaLogin.alertaerror();
                ventanaLogin.activarIniciar();
            }
        }

        if (tratar) {
            Login hiloLogin = new Login(nombre, clave, ventanaLogin, intento, ipNuevo);
            Thread thread = new Thread(hiloLogin);
            thread.start();
        }
    }
    /*
     * metodo que se encarga de dar inicio al hilo
     */
    public void run() {
        try {
            cliente = new Socket(ip, Integer.parseInt(VentanaLogin.configuracion.getPuertoLogin()));
            entrada = new DataInputStream(this.cliente.getInputStream());
            salida = new DataOutputStream(this.cliente.getOutputStream());
            //cliente.setSoTimeout(5000);

            iniciarSesion();
        } catch (UnknownHostException ex) {
            System.out.println("Intenta reconectar. Login");
            reconectar(reconectar+1);

        } catch (IOException ex) {
            System.out.println("Intenta reconectar.. Login");
            reconectar(reconectar+1);
        }
    }
}

